From 97f073ef10a175234c36c11b0ba57e88e8305b6c Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 8 Sep 2014 19:38:16 -0700 Subject: [PATCH] Test the output of `cargo package` --- src/cargo/ops/cargo_package.rs | 1 + tests/test_cargo_package.rs | 26 ++++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/cargo/ops/cargo_package.rs b/src/cargo/ops/cargo_package.rs index 6abafd282..3bf28597c 100644 --- a/src/cargo/ops/cargo_package.rs +++ b/src/cargo/ops/cargo_package.rs @@ -42,6 +42,7 @@ fn tar(pkg: &Package, src: &PathSource, shell: &mut MultiShell, // Put all package files into a compressed archive let ar = Archive::new(encoder); for file in try!(src.list_files(pkg)).iter() { + if file == dst { continue } let relative = file.path_relative_from(&dst.dir_path()).unwrap(); let relative = try!(relative.as_str().require(|| { human(format!("non-utf8 path in source directory: {}", diff --git a/tests/test_cargo_package.rs b/tests/test_cargo_package.rs index 969a2e647..5761916e0 100644 --- a/tests/test_cargo_package.rs +++ b/tests/test_cargo_package.rs @@ -1,4 +1,9 @@ -use support::{project, execs}; +extern crate tar; +extern crate flate2; + +use std::io::{File, MemReader}; + +use support::{project, execs, cargo_dir, ResultTest}; use support::{PACKAGING}; use hamcrest::{assert_that, existing_file}; @@ -12,10 +17,12 @@ test!(simple { name = "foo" version = "0.0.1" authors = [] + exclude = ["*.txt"] "#) .file("src/main.rs", r#" fn main() { println!("hello"); } - "#); + "#) + .file("src/bar.txt", ""); // should be ignored when packaging assert_that(p.cargo_process("package"), execs().with_status(0).with_stdout(format!("\ @@ -24,4 +31,19 @@ test!(simple { packaging = PACKAGING, dir = p.url()).as_slice())); assert_that(&p.root().join("foo-0.0.1.tar.gz"), existing_file()); + assert_that(p.process(cargo_dir().join("cargo")).arg("package"), + execs().with_status(0).with_stdout("")); + + let f = File::open(&p.root().join("foo-0.0.1.tar.gz")).assert(); + let mut rdr = flate2::reader::GzDecoder::new(f); + let contents = rdr.read_to_end().assert(); + let ar = tar::Archive::new(MemReader::new(contents)); + for f in ar.files().assert() { + let f = f.assert(); + match f.filename().unwrap() { + "foo-0.0.1/Cargo.toml" | + "foo-0.0.1/src/main.rs" => {} + s => fail!("unexpected file: {}", s), + } + } }) -- 2.30.2